home *** CD-ROM | disk | FTP | other *** search
/ QRZ! Ham Radio 8 / QRZ Ham Radio Callsign Database - Volume 8.iso / pc / files / t_unix / j109lxa4.tar / rwhodump.c < prev    next >
C/C++ Source or Header  |  1994-06-04  |  4KB  |  167 lines

  1. #include <stdio.h>
  2. #include <time.h>
  3. #include "global.h"
  4. #include "mbuf.h"
  5. #include "trace.h"
  6.  
  7. #ifndef __GNUC__
  8. static
  9. #endif
  10. struct outmp {
  11.     char out_line[9];   /* tty name */
  12.     char out_name[9];   /* user id */
  13.     int32 out_time; /* time on */
  14. };
  15.  
  16. #ifndef __GNUC__
  17. static
  18. #endif
  19. struct whod {
  20.     char wd_vers;
  21.     char wd_type;
  22.     char wd_fill[2];
  23.     int32  wd_sendtime;
  24.     int32  wd_recvtime;
  25.     char wd_hostname[33];
  26.     int32  wd_loadav[3];
  27.     int32  wd_boottime;
  28.     struct    whoent {
  29.         struct    outmp we_utmp;
  30.         int32  we_idle;
  31.         } wd_we[1024 / sizeof (struct whoent)];
  32. };
  33.  
  34. static int ntohrwhod __ARGS((struct whod *wp,struct mbuf **bpp));
  35.  
  36. void
  37. #ifdef MONITOR
  38. #ifdef PROTOTYPES
  39. rwho_dump(FILE *fp,struct mbuf **bpp,int mon)
  40. #else
  41. rwho_dump(fp,bpp,mon)
  42. #endif
  43. #else
  44. #ifdef PROTOTYPES
  45. rwho_dump(FILE *fp,struct mbuf **bpp)
  46. #else
  47. rwho_dump(fp,bpp)
  48. #endif
  49. FILE *fp;
  50. struct mbuf **bpp;
  51. #ifdef MONITOR
  52. int mon;
  53. #endif
  54. #endif
  55. {
  56.     int i;
  57.     int32 t;
  58.     char *cp;
  59.     struct whod rwhod;
  60.     if(bpp == NULLBUFP || *bpp == NULLBUF)
  61.         return;
  62. #ifdef MONITOR
  63.     if (mon)
  64.         fprintf(stderr, "RWHO ");
  65.     else
  66. #endif
  67.     fprintf(fp,"RWHO: ");
  68.     if(ntohrwhod(&rwhod,bpp) == -1) {
  69.         fprintf(fp,"bad data\n");
  70.         return;
  71.     }
  72. #ifdef MONITOR
  73.     if (!mon)
  74.     {
  75. #endif
  76.     if(rwhod.wd_vers != 1)
  77.         fprintf(fp,"version %d  ",rwhod.wd_vers);
  78.     if(rwhod.wd_type != 1)
  79.             fprintf(fp,"type %d  ",rwhod.wd_type);
  80.     cp = ctime(&rwhod.wd_sendtime);
  81.     cp[24] = '\0';
  82.     fprintf(fp,"send %s  ",cp);
  83.     t = rwhod.wd_recvtime;
  84.     if(t / 86400)
  85.         fprintf(fp,"%ld:",t/86400);
  86.     t %= 86400;
  87.     fprintf(fp,"recv %02ld:%02ld\n",t / 3600,(t % 3600)/60);
  88.     fprintf(fp,"      host %s  loadvg %ld %ld %ld  ",rwhod.wd_hostname,
  89.         rwhod.wd_loadav[0],rwhod.wd_loadav[1],
  90.         rwhod.wd_loadav[2]);
  91.         fprintf(fp,"boot %s",ctime(&rwhod.wd_boottime));
  92. #ifdef MONITOR
  93.     }
  94.     else
  95.     {
  96.         fprintf(fp, "%s load %d %d %d\n", rwhod.wd_hostname,
  97.             rwhod.wd_loadav[0], rwhod.wd_loadav[1],
  98.             rwhod.wd_loadav[2]);
  99.     }
  100. #endif
  101.     i = 0;
  102.     while(rwhod.wd_we[i].we_utmp.out_line[0] != '\0') {
  103. #ifdef MONITOR
  104.         if (mon)
  105.         {
  106.         fprintf(fp, "%-12s%c", rwhod.wd_we[i].we_utmp.out_name,
  107.             (i % 5 == 4? '\n': '\t'));
  108.         }
  109.         else
  110.         {
  111. #endif
  112.         fprintf(fp,"      %-12s%-12s",rwhod.wd_we[i].we_utmp.out_name,
  113.         rwhod.wd_we[i].we_utmp.out_line);
  114.         t = rwhod.wd_we[i].we_idle;
  115.         if(t / 86400)
  116.             fprintf(fp,"%ld:",t/86400);
  117.         else
  118.             fprintf(fp,"  ");
  119.         t %= 86400;
  120.         fprintf(fp,"%02ld:%02ld    ",t / 3600, (t % 3600)/60);    
  121.         fprintf(fp,"%s",ctime(&rwhod.wd_we[i].we_utmp.out_time));
  122. #ifdef MONITOR
  123.         }
  124. #endif
  125.         ++i;
  126.     }
  127. #ifdef MONITOR
  128.     if (mon && i % 5)
  129.         fprintf(fp, "\n");
  130. #endif
  131. }
  132. static int
  133. ntohrwhod(wp,bpp)
  134. struct whod *wp;
  135. struct mbuf **bpp;
  136. {
  137.     int i;
  138.     char wbuf[60];
  139.     if(pullup(bpp,wbuf,60) != 60)
  140.         return -1;
  141.     wp->wd_vers = wbuf[0];
  142.     wp->wd_type = wbuf[1];
  143.     wp->wd_fill[0] = wbuf[2];
  144.     wp->wd_fill[1] = wbuf[3];
  145.     wp->wd_sendtime = get32(&wbuf[4]);
  146.     wp->wd_recvtime = get32(&wbuf[8]);
  147.     memcpy(wp->wd_hostname,&wbuf[12],32);
  148.     wp->wd_hostname[32] = '\0';
  149.     wp->wd_loadav[0] = get32(&wbuf[44]);
  150.     wp->wd_loadav[1] = get32(&wbuf[48]);
  151.     wp->wd_loadav[2] = get32(&wbuf[52]);
  152.     wp->wd_boottime = get32(&wbuf[56]);
  153.     for(i = 0; i < 42; ++i) {
  154.         if(pullup(bpp,wbuf,24) != 24) {
  155.             wp->wd_we[i].we_utmp.out_line[0] = '\0';
  156.             return 0;
  157.         }
  158.         memcpy(wp->wd_we[i].we_utmp.out_line,wbuf,8);
  159.         wp->wd_we[i].we_utmp.out_line[8] = '\0';
  160.         memcpy(wp->wd_we[i].we_utmp.out_name,&wbuf[8],8);
  161.         wp->wd_we[i].we_utmp.out_name[8] = '\0';
  162.         wp->wd_we[i].we_utmp.out_time = get32(&wbuf[16]);
  163.         wp->wd_we[i].we_idle = get32(&wbuf[20]);
  164.     }
  165.     return 0;
  166. }
  167.